#ifndef MARTSELBASE_H
#define MARTSELBASE_H

#include "BaseMultSel.h"

class Joueur;
class LireMartiales;

/**
 * Classe gérant la sélection des catégories de compétences martiales.
 * La liste des compétences est lue depuis ListeArme.h
 *
 * @see BaseMultSel
 * @author Johan "Solo" Luisier
 */
class MartSelBase : public BaseMultSel
{
  Q_OBJECT
 public:
  MartSelBase(Joueur* j, QWidget* parent = 0);
  MartSelBase(const MartSelBase& martSel);
  virtual ~MartSelBase();
 protected:
 private:
  /**
   * Nombre de groupes larges (ou groupes restreints sans groupe
   * large, comme les arcs). Statique par soucis d'optimisation.
   */
  static const unsigned int nbrGL;
  /**
   * Noms des groupes larges existants.
   */
  static const std::vector<std::string> nomsGL;
  /**
   * Pointeur sur le PJ auquel on veut ajouter de nouvelles
   * compétences martiales.
   */
  Joueur *joueur;
  /**
   * Détermine si le PJ peut acheter un groupe (large ou restreint) en
   * entier.
   */
  bool accesGroupes;
  /**
   * Nombre de classe du PJ.
   */
  unsigned int nbrClasses;
  /**
   * Table de correspondance entre la classe et le coût des
   * compétences martiales associées.
   */
  std::map<std::string, unsigned int> acces;
  /**
   * Pointeur sur le lecteur de fichier XML.
   */
  const LireMartiales * LireArmesXML;
  StatusCode selectionArmes(const unsigned int& large,
			    const unsigned int& restreint = 0);
  StatusCode collecterArmes(const unsigned int& large,
			    const unsigned int& restreint,
			    std::vector<unsigned int>* liste);
 private:
  void prepareBoutons();
 private slots:
  void selectionner();
};

#endif // MARTSELBASE_H
